{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sklearn import datasets\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f43e879cf28>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(7968)\n",
    "data_count = 1000\n",
    "\n",
    "X, Y = datasets.make_moons(n_samples=data_count, noise=0.2)\n",
    "plt.scatter(X[:,0], X[:, 1], c=Y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 梯度\n",
    "## softmax(交叉熵)\n",
    "$$\n",
    "Loss_i = s_i - 1\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## tanh\n",
    "$$\n",
    "\\frac{\\partial tanh(x)}{\\partial x} = 1 - tanh^2(x)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Model(object):\n",
    "    \n",
    "    def __init__(self, input_dim, output_dim, hidden_dim, reg_lambda, learn_rate):\n",
    "        '''\n",
    "        @param input_dim: 输入维度\n",
    "        @param output_dim: 输出维度\n",
    "        @param hidden_dim: 隐藏维度\n",
    "        @param reg_lambda: 正则惩罚\n",
    "        @param learn_rate: 学习率\n",
    "        '''\n",
    "        # 参数初始化\n",
    "        self.w1 = np.random.randn(input_dim, hidden_dim) / np.sqrt(input_dim)\n",
    "        self.b1 = np.zeros((1, hidden_dim))\n",
    "        self.w2 = np.random.randn(hidden_dim, output_dim) / np.sqrt(hidden_dim)\n",
    "        self.b2 = np.zeros((1, output_dim))\n",
    "        self.reg_lambda = reg_lambda\n",
    "        self.learn_rate = learn_rate\n",
    "        # 首先计算，避免重复计算\n",
    "        self.reg_rate = 1 - self.reg_lambda * self.learn_rate \n",
    "        self.X = None\n",
    "        self.Y = None\n",
    "        self.data_count = None\n",
    "    # 前向传播\n",
    "    def front(self):\n",
    "        # 第一层计算\n",
    "        layer_1_out = self.X.dot(self.w1) + self.b1\n",
    "        # 经过激活函数\n",
    "        self.active_out = np.tanh(layer_1_out)\n",
    "        # 第二层计算\n",
    "        self.hidden_out = self.active_out.dot(self.w2) + self.b2\n",
    "        # softmax优化\n",
    "        self.hidden_out -=  np.max(self.hidden_out)\n",
    "        # exp\n",
    "        exp_out = np.exp(self.hidden_out)\n",
    "        # softmax函数\n",
    "        self.softmax_out = exp_out / np.sum(exp_out, axis=1, keepdims=True)\n",
    "        \n",
    "    # 后向梯度传播\n",
    "    def back(self):\n",
    "        # softmax梯度\n",
    "        self.softmax_grad = np.copy(self.softmax_out)\n",
    "        self.softmax_grad[range(self.data_count), self.Y] -= 1\n",
    "        # 第二层梯度计算\n",
    "        self.dw2 = self.active_out.T.dot(self.softmax_grad)\n",
    "        self.db2 = np.sum(self.softmax_grad, axis=0, keepdims=True)\n",
    "        # 隐藏层梯度计算\n",
    "        self.active_grad = self.softmax_grad.dot(self.w2.T) * (1 - np.power(self.active_out, 2))\n",
    "        # 第一层梯度计算\n",
    "        self.dw1 = np.dot(self.X.T, self.active_grad)\n",
    "        self.db1 = np.sum(self.active_grad, axis=0, keepdims=True)\n",
    "    # 参数更新                 \n",
    "    def update(self):\n",
    "        self.w1 = self.reg_rate * self.w1 - self.learn_rate * self.dw1\n",
    "        self.b1 = self.reg_rate * self.b1 - self.learn_rate * self.db1\n",
    "        self.w2 = self.reg_rate * self.w2 - self.learn_rate * self.dw2\n",
    "        self.b2 = self.reg_rate * self.b2 - self.learn_rate * self.db2 \n",
    "    \n",
    "    def train(self, X, Y, iters=1000):\n",
    "        self.feed(X, Y)\n",
    "        for it in range(iters):\n",
    "            self.front()\n",
    "            self.back()\n",
    "            self.update()\n",
    "        \n",
    "    def __str__(self):\n",
    "        return str({\n",
    "            'w1': self.w1,\n",
    "            'b1': self.b1,\n",
    "            'w2': self.w2,\n",
    "            'b2': self.b2\n",
    "        })\n",
    "    \n",
    "    def feed(self, X, Y):\n",
    "        self.X = X\n",
    "        self.Y = Y\n",
    "        self.data_count = X.shape[0]\n",
    "    \n",
    "    def test(self):\n",
    "        self.front()\n",
    "        pre_y = np.argmax(self.softmax_out, axis=1)\n",
    "        compare = self.Y == pre_y\n",
    "        right = 0\n",
    "        for flag in compare:\n",
    "            right += 1 if flag else 0\n",
    "        return 1.0 * right / self.data_count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_dim = 2\n",
    "output_dim = 2\n",
    "learn_rate = 0.001\n",
    "reg_lambda = 0.001\n",
    "hidden_dim = 100\n",
    "\n",
    "model = Model(input_dim, output_dim, hidden_dim, reg_lambda, learn_rate)\n",
    "model.train(X, Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.971\n"
     ]
    }
   ],
   "source": [
    "print(model.test())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
